package algoritmi;

/**
 * Optimalni algoritam, ima maksimalni moguci broj pogodaka.
 * 
 * @author Maja Kabiljo
 * 
 */
public class Optimalni extends AlgoritamImpl {
	private int[] sledecePojavljivanje;
	private int[] koraci;

	public Optimalni() {
	}

	@Override
	protected void start(int[] koraci) {
		sledecePojavljivanje = new int[velicinaKesa];
		for (int i = 0; i < velicinaKesa; i++)
			sledecePojavljivanje[i] = -1;
		this.koraci = koraci;
	}

	@Override
	protected int[] getVrednosti() {
		return sledecePojavljivanje;
	}

	private int nadjiSledecePojavljivanje(int index) {
		int i = index + 1;
		while ((i < koraci.length) && (koraci[i] != koraci[index]))
			i++;
		return koraci.length - i;
	}

	@Override
	protected void pogodak(int korak, int pozicijaUKesu) {
		sledecePojavljivanje[pozicijaUKesu] = nadjiSledecePojavljivanje(korak);
	}

	@Override
	protected int promasaj(int korak) {
		int pozicija = Utils.nadjiIndeksMinimuma(sledecePojavljivanje);
		sledecePojavljivanje[pozicija] = nadjiSledecePojavljivanje(korak);
		return pozicija;
	}
}
